package com.upcode.weighing.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.upcode.weighing.domain.SysDetail;
import com.upcode.weighing.domain.SysEditVo;
import com.upcode.weighing.domain.SysRes;
import com.upcode.weighing.domain.SysUser;
import com.upcode.weighing.vo.add.SysUserAddVo;
import com.upcode.weighing.vo.del.BaseDelVo;
import com.upcode.weighing.vo.edit.SysUserEditVo;
import com.upcode.weighing.vo.req.PageReqVo;
import com.upcode.weighing.vo.req.org.OrgMigrationReqVo;
import com.upcode.weighing.vo.req.pc.SysUserAuthReqVo;
import com.upcode.weighing.vo.req.pc.SysUserDelReqVo;
import com.upcode.weighing.vo.req.pc.SysUserReqVo;
import com.upcode.weighing.vo.req.pc.SysUserUpdatePwdVo;
import com.upcode.weighing.vo.resp.PageRespVo;
import com.upcode.weighing.vo.resp.pc.SysUserDetail;
import com.upcode.weighing.vo.resp.pc.SysUserRespVo;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.util.List;

/**
 * <p>
 * 用户表 服务类
 * </p>
 *
 * @author alex
 * @since 2019-04-10
 */
public interface SysUserService extends IService<SysUser> {
    SysUserDetail getUserDetailById(long userId);

    Integer checkLoginId(String loginId);

    IPage<SysUserRespVo> selectByList(PageReqVo<SysUserReqVo> vo);

    List<SysUserRespVo> selectByList(SysUserReqVo vo);

    boolean saveInfo(SysUserAddVo vo);

    SysUserEditVo selectById(Long id);

    int updateByPWD(SysUser vo);//修改密码

    boolean updateById(SysUserEditVo vo,String opType, Integer disableUserDaysNoUpPwd);

    boolean updatePwd(SysUserUpdatePwdVo vo);

    /**
     * 重置密码
     * @param vo
     * @return
     */
    boolean resetUserPwd(SysUser vo);

    void batchDelete(SysUserDelReqVo reqVo, String opType, Integer disableUserDaysNoUpPwd);

    /**
     * 导出
     *
     * @param file 导出模板
     * @param reqVo 查询参数
     * @return 工作簿
     * @throws Exception 导出异常信息
     */
    XSSFWorkbook exportUserList(File file, SysUserReqVo reqVo) throws Exception;

    String getImportDataSchedule(String orgCode);

    /**
     * 构建Excel导出模板字典项
     *
     * @param file 导出模板文件
     */
    XSSFWorkbook buildImportTemplateDic(File file) throws Exception;

    /**
     * 用户与机构关联
     *
     * @param file 界面传入文件
     * @throws Exception 导入异常信息
     */
    void batchHandleLinkOrg2User(MultipartFile file) throws Exception;

    /**
     * 所属机构迁移
     *
     * @param reqVo 请求入参
     */
    void migrateOwnOrg(OrgMigrationReqVo reqVo);

    /**
     * 用户列表查询
     *
     * @param reqVo 请求参数
     * @return 用户集合
     */
    List<SysUserRespVo> selectList(SysUserReqVo reqVo);

    /**
     * 批量授权-角色权限
     *
     * @param reqVo 请求参数
     */
    void batchAuthorize(SysUserAuthReqVo reqVo);

    List<SysUser> queryList(SysUserReqVo reqVo);

    /**
     * 批量导入
     *
     * @param file 界面传入文件
     * @param orgCode 所选机构编码
     * @throws Exception 导入异常信息
     */
    void importData(MultipartFile file, String orgCode) throws Exception;
    List<SysRes> getResByLoginName(String loginName);//根据登录名获取菜单
    List<String> getResByParam(String loginName);//根据用户获取权限
    List<String> getAdminPer();//超级管理员获取所有权限
    /**
     * 查询账号分页列表
     */
    PageRespVo<SysDetail> list(PageReqVo<SysDetail> vo);
    /**
     * 查询账号详情
     */
    SysDetail getByUserId(Long userId);//查询账号详情
    /**
     * 根据id修改信息
     */
    boolean updateByUserId(SysEditVo user);
    /**
     * 初始化密码
     */
    boolean initializePWD(SysEditVo user);
    /**
     * 冻结账号
     */
    boolean freeze(SysEditVo user);

    /**
     *删除用户
     */
    boolean updateStatus(BaseDelVo vo);
    /**
     *启用用户
     */
    boolean startStatus(SysEditVo user);

}
